package com.example.demo.util;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.DesensitizedUtil;
import com.example.demo.entity.User;
import jakarta.servlet.http.HttpServletRequest;

import java.util.*;


/**
 * @description：常使用的工具函数.
 * @author：lw
 * @since：2023/12/29
 **/


public class NormalUtil {
    public static String getRandom(int length){
       StringBuilder res= new StringBuilder();
       for(int i=0;i<length;i++){
           Random random = new Random();
           res.append(random.nextInt(10));
       }
       return res.toString();
    }
    public static String getRequestIp(HttpServletRequest request){
        String clientIp = request.getHeader("X-Forwarded-For");
        if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
            // 如果请求头中没有X-Forwarded-For，则使用RemoteAddr获取IP
            clientIp = request.getRemoteAddr();
        }
//        System.out.println("util："+clientIp);
        // 对于可能存在代理的情况，X-Forwarded-For可能包含多个IP（用逗号分隔），取第一个作为客户端IP
        if (clientIp.contains(",")) {
            clientIp = clientIp.split(",")[0];
        }
        return clientIp;
        //在实际生产环境中，由于可能存在负载均衡器、反向代理等中间层，因此需要根据实际情况调整获取IP地址的方法，以确保获取到的是真实的客户端IP。
    }
    public static String getType(Object obj){ if(obj!=null) return obj.getClass().getSimpleName();else  return  ""; }
    public static boolean isEmpty(Object obj){ return  obj == null || "".equals(obj); }
    @SafeVarargs
    public static Map<String,String> mergeMaps(Map<String,String>...maps){
       Map<String,String> map=new LinkedHashMap<>();
        for (Map<String,String> m : maps) {
            map.putAll(m);
        }
        return  map;
    }
    public static<T> List<Map<String,Object>> beanListToMapList(List<T> list){
        List<Map<String,Object>> newList=new ArrayList<>();
        list.forEach(v->{ newList.add(BeanUtil.beanToMap(v));});
        return newList;
    }
    public static User userInfoDesensitizedHandle(User user){
        user.setPassword(null);
        user.setWxOpenid(null);
        user.setPhone((DesensitizedUtil.mobilePhone(user.getPhone())));
        return user;
    }
}
